home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 2 / ETO Development Tools 2.iso / Tools - Objects / MacApp / MacApp CD Release / MacApp 2.0.1 (Many Libraries) / Libraries / UObject.TObject.p < prev    next >
Encoding:
Text File  |  1990-10-25  |  8.1 KB  |  370 lines  |  [TEXT/MPS ]

  1. {$P}
  2. {[a-,body+,h-,o=100,r+,rec+,t=4,u+,#+,j=20/57/1$,n-]}
  3. { UObject.TObject.p }
  4. { Copyright © 1984-1990 by Apple Computer, Inc.  All rights reserved. }
  5. {$IFC UNDEFINED qMacApp}
  6. {$SETC qMacApp := FALSE}
  7. {$ENDC}
  8.  
  9. {$Push} {$IFC NOT qDebugTheDebugger}
  10. {$W+}
  11. {$R-}
  12. {$Init-}
  13. {$OV-}
  14. {$ENDC}
  15.  
  16. {--------------------------------------------------------------------------------------------------}
  17. {$S MAObjectRes}
  18.  
  19. FUNCTION TObject.Clone;
  20.  
  21.     BEGIN
  22.     Clone := ShallowClone;
  23.     END;
  24.  
  25. {--------------------------------------------------------------------------------------------------}
  26. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  27. {$S MAFields}
  28.  
  29. PROCEDURE TObject.DynamicFields(PROCEDURE DoToField(fieldName: Str255;
  30.                                                     fieldAddr: Ptr;
  31.                                                     fieldType: integer));
  32.  
  33.     BEGIN
  34.     { ??? Would a nicer default be a formatted memory dump? }
  35.     END;
  36. {$Pop}
  37.  
  38. {--------------------------------------------------------------------------------------------------}
  39. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  40. {$S MAFields}
  41.  
  42. PROCEDURE TObject.Fields(PROCEDURE DoToField(fieldName: Str255;
  43.                                              fieldAddr: Ptr;
  44.                                              fieldType: integer));
  45.  
  46.     CONST
  47.         bObjClassID         = bInteger;
  48.  
  49.     VAR
  50.         myID:                ObjClassID;
  51.         mySize:             Size;
  52.  
  53.     BEGIN
  54.     myID := GetClass;
  55.     mySize := GetInstanceSize;
  56.     DoToField('TObject', NIL, bClass);
  57.     DoToField('ObjClassID', @myID, bObjClassID);
  58.     DoToField('Size in bytes', @mySize, bLongint);
  59.  
  60.     DynamicFields(DoToField);                            { Get the dynamic part inspected }
  61.  
  62.     END;
  63. {$Pop}
  64.  
  65. {--------------------------------------------------------------------------------------------------}
  66. {$S MAObjectRes}
  67.  
  68. PROCEDURE TObject.ForAllSubClassesDo(PROCEDURE DoToSubClass(theClass: ObjClassID));
  69.  
  70.     BEGIN
  71.     EachSubClassDo(GetClass, DoToSubClass);
  72.     END;
  73.  
  74. {--------------------------------------------------------------------------------------------------}
  75. {$S MAObjectRes}
  76.  
  77. PROCEDURE TObject.ForAllSuperClassesDo(PROCEDURE DoToSubClass(theClass: ObjClassID));
  78.  
  79.     BEGIN
  80.     EachSuperClassDo(GetClass, DoToSubClass);
  81.     END;
  82.  
  83. {--------------------------------------------------------------------------------------------------}
  84. {$S MAObjectRes}
  85.  
  86. PROCEDURE TObject.Free;
  87.  
  88.     BEGIN
  89.     ShallowFree;
  90.     END;
  91.  
  92. {--------------------------------------------------------------------------------------------------}
  93. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  94. {$S MAObjectRes}
  95.  
  96. PROCEDURE TObject.GetClassName(VAR clName: MAName);
  97.  
  98.     BEGIN
  99.     GetClassNameFromID(GetClass, clName);
  100.     END;
  101. {$Pop}
  102.  
  103. {--------------------------------------------------------------------------------------------------}
  104. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  105. {$S MAObjectRes}
  106.  
  107. FUNCTION TObject.GetClass: ObjClassID;
  108.  
  109.     BEGIN
  110.     GetClass := GetClassID(self);
  111.     END;
  112. {$Pop}
  113.  
  114. {--------------------------------------------------------------------------------------------------}
  115. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  116. {$S MAObjectRes}
  117.  
  118. FUNCTION TObject.GetClassSize: Size;
  119.  
  120.     BEGIN
  121.     GetClassSize := GetClassSizeFromID(GetClass);
  122.     END;
  123. {$Pop}
  124.  
  125. {--------------------------------------------------------------------------------------------------}
  126. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  127. {$S MAObjectRes}
  128.  
  129. FUNCTION TObject.GetDynamicPtr: Ptr;
  130.     VAR
  131.         classSize: Size;
  132.  
  133.     BEGIN
  134.     classSize := GetClassSize;
  135.  
  136.     if (GetHandleSize(Handle(self)) - classSize) > 0 THEN
  137.         GetDynamicPtr := Ptr(striplong(Handle(self)^) + classSize)
  138.     ELSE
  139.         GetDynamicPtr := NIL;
  140.     END;
  141. {$Pop}
  142.  
  143. {--------------------------------------------------------------------------------------------------}
  144. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  145. {$S MAInspector}
  146.  
  147. PROCEDURE TObject.GetInspectorName(VAR inspectorName: Str255);
  148.  
  149.     BEGIN
  150.     END;
  151. {$Pop}
  152.  
  153. {--------------------------------------------------------------------------------------------------}
  154. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  155. {$S MAObjectRes}
  156.  
  157. FUNCTION TObject.GetDynamicSize: Size;
  158.  
  159.     BEGIN
  160.     GetDynamicSize := GetHandleSize(Handle(self)) - GetClassSize;
  161.     END;
  162. {$Pop}
  163.  
  164. {--------------------------------------------------------------------------------------------------}
  165. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  166. {$S MAObjectRes}
  167.  
  168. FUNCTION TObject.GetInstanceSize: Size;
  169.  
  170.     BEGIN
  171.     GetInstanceSize := GetHandleSize(Handle(self));
  172.     END;
  173. {$Pop}
  174.  
  175. {--------------------------------------------------------------------------------------------------}
  176. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  177. {$S MAObjectRes}
  178.  
  179. FUNCTION TObject.GetSuperClass: ObjClassID;
  180.  
  181.     BEGIN
  182.     GetSuperClass := GetSuperClassID(GetClass);
  183.     END;
  184. {$Pop}
  185.  
  186. {--------------------------------------------------------------------------------------------------}
  187. {$S MAObjectRes}
  188.  
  189. PROCEDURE TObject.Initialize;
  190.  
  191.     BEGIN
  192.     END;
  193.  
  194. {--------------------------------------------------------------------------------------------------}
  195. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  196. {$S MADebug}
  197.  
  198. PROCEDURE TObject.Inspect;
  199.  
  200.     VAR
  201.         clName:             MAName;
  202.  
  203.     BEGIN
  204.     GetClassName(clName);
  205.     Write(clName, '     ');
  206.     WritePtr(self);
  207.     WriteLn;
  208.     pInspectLinePos := 0;
  209.     Fields(InspectField);
  210.     END;
  211. {$Pop}
  212.  
  213. {--------------------------------------------------------------------------------------------------}
  214. {$S MAObjectRes}
  215.  
  216. PROCEDURE TObject.IObject;
  217.  
  218.     BEGIN
  219.     Initialize;
  220.     END;
  221.  
  222. {--------------------------------------------------------------------------------------------------}
  223. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  224. {$S MAObjectRes}
  225.  
  226. FUNCTION TObject.IsSameClass(testClass: ObjClassID): BOOLEAN;
  227.  
  228.     BEGIN
  229.     IsSameClass := (GetClass = testClass);
  230.     END;
  231. {$Pop}
  232.  
  233. {--------------------------------------------------------------------------------------------------}
  234. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  235. {$S MAObjectRes}
  236.  
  237. FUNCTION TObject.IsMemberClass(testClass: ObjClassID): BOOLEAN;
  238.  
  239.     BEGIN
  240.     IsMemberClass := IsClassIDMemberClass(GetClass, testClass);
  241.     END;
  242. {$Pop}
  243.  
  244. {--------------------------------------------------------------------------------------------------}
  245. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  246. {$W+}
  247. {$R-}
  248. {$OV-}
  249. {$S MAObjectRes}
  250.  
  251. FUNCTION TObject.Lock(lockIt: BOOLEAN): BOOLEAN;
  252.  
  253.     VAR
  254.         wasLocked:            BOOLEAN;
  255.  
  256.     BEGIN
  257.     wasLocked := IsHandleLocked(self);
  258.     Lock := wasLocked;
  259.     IF wasLocked <> lockIt THEN
  260.         IF lockIt THEN
  261.             HLock(Handle(self))
  262.         ELSE
  263.             HUnLock(Handle(self))
  264.     END;
  265. {$Pop}
  266.  
  267. {--------------------------------------------------------------------------------------------------}
  268. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  269. {$S MAObjectRes}
  270.  
  271. PROCEDURE TObject.SetInstanceSize(newSize: Size);
  272.  
  273.     BEGIN
  274.     {$IFC qDebug}
  275.     IF newSize < GetClassSize THEN
  276.         ProgramBreak(
  277.                    'In TObject.SetInstanceSize… trying to set instance size less than class minimum'
  278.                      );
  279.     {$Endc}
  280.     IF qMacApp & pAllocateObjectsFromPerm THEN
  281.         SetPermHandleSize(Handle(self), newSize)
  282.     ELSE
  283.         SetHandleSize(Handle(self), newSize);
  284.     END;
  285. {$Pop}
  286.  
  287. {--------------------------------------------------------------------------------------------------}
  288. {$Push} {$IFC qTrace} {$D+} {$ENDC}
  289. {$S MAObjectRes}
  290.  
  291. PROCEDURE TObject.SetDynamicSize(newSize: Size);
  292.  
  293.     BEGIN
  294.     IF qMacApp & pAllocateObjectsFromPerm THEN
  295.         SetPermHandleSize(Handle(self), newSize + GetClassSize)
  296.     ELSE
  297.         SetHandleSize(Handle(self), newSize + GetClassSize);
  298.     END;
  299. {$Pop}
  300.  
  301. {--------------------------------------------------------------------------------------------------}
  302. {$S MAObjectRes}
  303.  
  304. FUNCTION TObject.ShallowClone: TObject;
  305.  
  306.     VAR
  307.         result:             TObject;
  308.         oldPerm:            BOOLEAN;
  309.         err:                OSErr;
  310.  
  311.         {$IFC qDebug}
  312.         s:                    MAName;
  313.         {$ENDC}
  314.  
  315.     BEGIN
  316.     {$IFC qDebug}
  317.     IF gAskAboutAlloc THEN
  318.         BEGIN
  319.         GetCallersMethodName(s);
  320.  
  321.         IF s = 'TOBJECT.CLONE' THEN                     { report about caller of TObject.Clone,
  322.                                                          instead }
  323.             GetMethodName(LongIntPtr(GetCurStackFramePtr)^ + 4, s);
  324.  
  325.         Write('Within ', s, ': trying to clone a: ''');
  326.         GetClassName(s);
  327.         WriteLn(s, '''.');
  328.  
  329.         IF ReadYesNo('     Return NIL (Y or N) [N]? ') THEN
  330.             BEGIN
  331.             ShallowClone := NIL;
  332.             EXIT(ShallowClone);
  333.             END;
  334.         END;
  335.     {$ENDC}
  336.  
  337.     result := self;
  338.  
  339.     {$IFC qMacApp}
  340.     oldPerm := PermAllocation(TRUE);
  341.     {$ENDC}
  342.  
  343.     err := HandToHand(Handle(result));
  344.  
  345.     {$IFC qMacApp}
  346.     oldPerm := PermAllocation(oldPerm);
  347.     {$ENDC}
  348.  
  349.     IF err <> noErr THEN
  350.         result := NIL
  351.         {$IFC qInspector}
  352.     ELSE IF pAddNewObjectsToInspector THEN
  353.         AddObjectToInspector(result)
  354.         {$ENDC}
  355.                              ;
  356.  
  357.     ShallowClone := result;
  358.     END;
  359.  
  360. {--------------------------------------------------------------------------------------------------}
  361. {$S MAObjectRes}
  362.  
  363. PROCEDURE TObject.ShallowFree;
  364.  
  365.     BEGIN
  366.     Dispose(self);
  367.     END;
  368.  
  369. {$Pop}
  370.